package com.som.service.excel;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.IOUtils;

import com.som.beanconvert.FileDataParseInputInf;
import com.som.beanconvert.FileRowDataParseProcessInf;
import com.som.console.ErrorCode;
import com.som.console.ExcelProcException;

/**
 * 进行excel的读取操作
 * 
 * @author liujun
 * @date 2016年4月8日
 * @verion 0.0.1
 */
public abstract class FileReadProcess<O, T> {
	/**
	 * 通过过此抽换方法调用实现
	 * 
	 * @return
	 */
	protected abstract FileDataParseInputInf<T> getParseBean();

	/**
	 * 得到行数据转换对象信息
	 * 
	 * @return
	 */
	protected abstract FileRowDataParseProcessInf<T, O> getRowParseBean();

	/**
	 * 读取Excel数据转换成集合信息
	 * 
	 * @param path
	 *            excel路径
	 * @return 结果
	 */
	public void readExcelDataMap(String path, boolean isjumpFist, List<O> resultList, List<O> cityList) throws ExcelProcException {

		FileReader read = null;
		BufferedReader bufRead = null;

		try {
			read = new FileReader(path);
			bufRead = new BufferedReader(read);

			// 得到转换对象
			FileDataParseInputInf<T> parseBean = getParseBean();

			// 得到行数据转换接口
			FileRowDataParseProcessInf<T, O> rowParse = getRowParseBean();

			String line = null;
			while ((line = bufRead.readLine()) != null) {
				if (isjumpFist) {
					isjumpFist = false;
					continue;
				}
				// 将excel的数据转换成java对象
				T bean = parseBean.getMsginfo(line);

				// 将提取的行数据转换成集体对象
				rowParse.parseRowDataProcess(bean, resultList, cityList);
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new ExcelProcException(ErrorCode.FILE_NOTFOUNT.getMsg());
		} catch (IOException e) {
			e.printStackTrace();
			throw new ExcelProcException(ErrorCode.FILE_FILE_IS_ERROR.getMsg());
		} finally {
			IOUtils.closeQuietly(bufRead);
			IOUtils.closeQuietly(read);
		}

	}
}
